package interfaceGrafica;

import negocios.*;

import java.awt.Color;
import java.awt.Component;
import java.awt.Font;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JLayeredPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;

import java.awt.Dimension;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.Iterator;

import javax.swing.JScrollPane;

import javax.swing.table.DefaultTableCellRenderer;

import negocios.Resposta;

@SuppressWarnings("serial")
public class PainelTabela extends JLayeredPane {

	private Janela janela;
	private MenuPrincipal menuPrincipal;
	private Desafio desafio;
	private JLabel pontuacao;

	private JLabel background;
	private JButton home;
	private JButton playAgain;
	private JButton exit;
	private JTable table;

	private String string1;
	private String string2;
	private ImageIcon homeImagem1;
	private ImageIcon homeImagem2;
	private ImageIcon homeImagem3;
	private ImageIcon playAgainImagem1;
	private ImageIcon playAgainImagem2;
	private ImageIcon playAgainImagem3;
	private ImageIcon exitImagem1;
	private ImageIcon exitImagem2;
	private ImageIcon exitImagem3;
	protected ImageIcon backgroundImagem;

	public PainelTabela(Janela janela, MenuPrincipal menuPrincipal,
			Desafio desafio) {
		super();
		super.setBounds(0, 0, 800, 600);
		this.janela = janela;
		this.menuPrincipal = menuPrincipal;
		this.desafio = desafio;

		homeImagem1 = new ImageIcon(
				"Data\\Imagens\\TreinamentoDesafio\\homeImagem1.png");
		homeImagem2 = new ImageIcon(
				"Data\\Imagens\\TreinamentoDesafio\\homeImagem2.png");
		homeImagem3 = new ImageIcon(
				"Data\\Imagens\\TreinamentoDesafio\\homeImagem3.png");
		playAgainImagem1 = new ImageIcon(
				"Data\\Imagens\\TreinamentoDesafio\\playAgainImagem1.png");
		playAgainImagem2 = new ImageIcon(
				"Data\\Imagens\\TreinamentoDesafio\\playAgainImagem2.png");
		playAgainImagem3 = new ImageIcon(
				"Data\\Imagens\\TreinamentoDesafio\\playAgainImagem3.png");
		exitImagem1 = new ImageIcon(
				"Data\\Imagens\\TreinamentoDesafio\\exitImagem1.png");
		exitImagem2 = new ImageIcon(
				"Data\\Imagens\\TreinamentoDesafio\\exitImagem2.png");
		exitImagem3 = new ImageIcon(
				"Data\\Imagens\\TreinamentoDesafio\\exitImagem3.png");

		this.backgroundImagem = new ImageIcon(
				"Data\\Imagens\\TreinamentoDesafio\\backgroundTabela.png");
		this.background = new JLabel();
		this.background.setIcon(backgroundImagem);
		this.background.setDisabledIcon(backgroundImagem);
		this.background.setBounds(0, 0, 800, 600);
		super.add(background, JLayeredPane.DEFAULT_LAYER);

		playAgain = new JButton();
		MenuPrincipal.inicializarBotao(this, playAgain, playAgainImagem1,
				playAgainImagem2, playAgainImagem3, 473, 537,
				playAgainImagem1.getIconWidth(),
				playAgainImagem1.getIconHeight());
		playAgain.addMouseListener(new MouseAdapter() {
			public void mouseClicked(MouseEvent me) {
				mouseClicar(playAgain, 1);
			}
		});

		home = new JButton();
		MenuPrincipal.inicializarBotao(this, home, homeImagem1, homeImagem2,
				homeImagem3, 674, 515, 70, 85);
		home.addMouseListener(new MouseAdapter() {
			public void mouseClicked(MouseEvent me) {
				mouseClicar(home, 2);
			}
		});

		exit = new JButton();
		MenuPrincipal.inicializarBotao(this, exit, exitImagem1, exitImagem2,
				exitImagem3, 725, 515, 70, 85);
		exit.addMouseListener(new MouseAdapter() {
			public void mouseClicked(MouseEvent me) {
				mouseClicar(exit, 3);
			}
		});

		table = new JTable();
		JScrollPane scrollPane = new JScrollPane();
		String[] colunas = new String[] { "TRANSLATION", "INFINITIVE",
				"SIMPLE PAST", "PAST PARTICIPLE" };
		DefaultTableModel modelo;
		modelo = new DefaultTableModel(new Object[][] {}, colunas) {
			@SuppressWarnings("rawtypes")
			Class[] types = new Class[] { String.class, String.class, String.class, String.class };
			boolean[] canEdit = new boolean[] { false, false, false, false };
			@SuppressWarnings({ "unchecked", "rawtypes" })
			public Class getColumnClass(int columnIndex) {
				return types[columnIndex];
			}
			public boolean isCellEditable(int rowIndex, int columnIndex) {
				return canEdit[columnIndex];
			}
		};
		table.setModel(modelo);
		table.setPreferredSize(new Dimension(600, 30 * desafio
				.getListaDeRespostas().size()));
		table.setRowHeight(30);
		table.setFont(new java.awt.Font("Arial", 1, 12));

		modelo.setNumRows(desafio.getListaDeRespostas().size());

		Iterator<Resposta> iterator = desafio.getListaDeRespostas().iterator();
		int linha = 0;
		Resposta resposta;
		while (iterator.hasNext()) {
			resposta = iterator.next();
			table.setValueAt(resposta.getVerboSorteado().getTraducao(), linha,
					0);
			string1 = resposta.getVerboEscolhido().getInfinitive();
			string2 = resposta.getVerboSorteado().getInfinitive();
			if (string1.equals(string2)) {
				table.setValueAt(string1, linha, 1);
			} else {
				table.setValueAt(string1 + " (" + string2 + ")", linha, 1);
			}

			string1 = resposta.getVerboEscolhido().getSimplePast();
			string2 = resposta.getVerboSorteado().getSimplePast();
			if (string1.equals(string2)) {
				table.setValueAt(string1, linha, 2);
			} else {
				table.setValueAt(string1 + " (" + string2 + ")", linha, 2);
			}

			string1 = resposta.getVerboEscolhido().getPastParticiple();
			string2 = resposta.getVerboSorteado().getPastParticiple();
			if (string1.equals(string2)) {
				table.setValueAt(string1, linha, 3);
			} else {
				table.setValueAt(string1 + " (" + string2 + ")", linha, 3);
			}
			linha++;

			desafio.getGerenciadorDeComparacao().setVerboNoDrop(
					resposta.getVerboEscolhido());
			desafio.setPontuacao(desafio.getPontuacao()
					+ desafio.getGerenciadorDeComparacao().compararVerbos(
							resposta.getVerboSorteado()));
		}

		pontuacao = new JLabel();
		pontuacao.setFont(new Font("Arial", 1, 40));
		pontuacao.setBounds(370, 55, 420, 50);
		pontuacao.setText(Integer.toString(desafio.getPontuacao() * 100));
		super.add(pontuacao, JLayeredPane.PALETTE_LAYER);

		DefaultTableCellRenderer cellEditable = new DefaultTableCellRenderer() {
			@Override
			public Component getTableCellRendererComponent(JTable table,
					Object value, boolean isSelected, boolean hasFocus,
					int row, int column) {
				Component cell = super.getTableCellRendererComponent(table,
						value, isSelected, hasFocus, row, column);
				String texto = (String) table.getValueAt(row, column);
				if (texto.indexOf("(") >= 0) {
					cell.setBackground(Color.yellow);
					String novoValor = (String) table.getValueAt(row, column);
					table.setValueAt(novoValor, row, column);
				} else
					cell.setBackground(Color.white);
				this.setHorizontalAlignment(CENTER);
				return cell;
			}
		};
		table.setDefaultRenderer(Object.class, cellEditable);
		scrollPane.setBounds(5, 100, 790, 400);
		scrollPane.setViewportView(table);
		scrollPane.setOpaque(false);
		scrollPane.getViewport().setOpaque(false);
		super.add(scrollPane, JLayeredPane.PALETTE_LAYER);
	}

	private void mouseClicar(JButton botao, int escolha) {
		if (!botao.isEnabled())
			return;
		switch (escolha) {
		case 1:
			desafio = new Desafio();
			menuPrincipal.setModoDeJogo(desafio);
			janela.setContentPane(new PainelDesafio(janela, menuPrincipal,
					desafio));
			janela.pack();
			break;

		case 2:
			janela.setContentPane(menuPrincipal);
			janela.pack();
			break;

		case 3:
			System.exit(0);
			break;

		default:

			break;
		}
	}
}
